<?php

// 缩略图处理类
class Thumb
{

    public function make($file, $filename, $width, $height, $type = 3)
    { // $width -> 缩略图的宽
        $this->check($file);
        $image = $this->resource($file); // 图片资源
        $info = $this->size($width, $height, imagesx($image), imagesy($image), $type);
        $res = imagecreatetruecolor($info[0], $info[1]); // 缩略图资源
        imagecopyresampled($res, $image, 0, 0, 0, 0, $info[0], $info[1], $info[2], $info[3]);
        // header('Content-type:image/jpeg');
        // imagejpeg($res);
        return $this->saveAction($file)($res, $filename);
    }

    // 保存缩略图
    protected function saveAction($file) {
        $info = getimagesize($file);
        $functions = [1 => 'imagegif', 2 => 'imagejpeg', 3 => 'imagepng'];
        return $functions[$info[2]];
    }

    // 计算画布的长宽
    protected function size($rw, $rh, $iw, $ih, $type)
    {
        switch ($type) {
            case 1: // 保留宽度，高度自适应
                $rh = $rw / $iw * $ih;
                break;
            case 2: // 保首高度，宽度和适应
                $rw = $rh / $ih * $iw;
                break;
            case 3:
            default:
                if ($iw / $rw > $ih / $rh) {
                    $iw = $ih / $rh * $rw;
                } else {
                    $ih = $iw / $rw * $rh;
                }
        }
        return [$rw, $rh, $iw, $ih];
    }

    // 异常处理
    protected function check($image)
    {
        if (!is_file($image) || getimagesize($image) === false) {
            throw new Exception('is not file or is not a image');
        }
    }

    // 创建资源
    protected function resource($image)
    {
        $info = getimagesize($image);
        $functions = [1 => 'imagecreatefromgif', 2 => 'imagecreatefromjpeg', 3 => 'imagecreatefrompng'];
        $call = $functions[$info[2]];
        return $call($image);
    }
}